MTK: create new track each time logger is turned on. (Maybe a little wine, a
authorrobertl <robertl>
Tue, 22 Jul 2008 05:50:43 +0000 (05:50 +0000)
committerrobertl <robertl>
Tue, 22 Jul 2008 05:50:43 +0000 (05:50 +0000)
little soft music...)

internal_styles.c
mtk_logger.c
reference/track/mtk_logger.gpx
reference/track/mtk_logger_m241.gpx

index b21cab1420c5a0dfe45aeb9f710665fdfbf6dd0b..49c6060cbe0800d6a04829cfb44aa213c1ac701e 100644 (file)
@@ -717,6 +717,48 @@ static char mxf[] =
 "OFIELD        CONSTANT, \"ff0000\", \"%s\"    # COLOR\n"
 "OFIELD        CONSTANT, \"47\", \"%s\"                # ICON\n"
 ;
+static char navigonwpt[] = 
+"# gpsbabel XCSV style file\n"
+"# Author: Tom Glaab\n"
+"#\n"
+"DESCRIPTION     Navigon Waypoints\n"
+"SHORTLEN        8\n"
+"#\n"
+"#\n"
+"# FILE LAYOUT DEFINITIIONS:\n"
+"#\n"
+"FIELD_DELIMITER         |\n"
+"RECORD_DELIMITER        NEWLINE\n"
+"BADCHARS                |\n"
+
+"#\n"
+"# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:\n"
+"#\n"
+
+"OFIELD  SHORTNAME, \"\",\"[%-.14s \"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"\",\"]\"\n"
+"OFIELD  CONSTANT, \"%s\",\"[0][17]\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  LON_DECIMAL, \"\", \"%08.5f\"\n"
+"OFIELD  LAT_DECIMAL, \"\", \"%08.5f\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"\"\n"
+"OFIELD  CONSTANT, \"%s\",\"49\"\n"
+;
 static char nima[] = 
 "# gpsbabel XCSV style file\n"
 "#\n"
@@ -1139,8 +1181,8 @@ static char xmapwpt[] =
 "IFIELD        IGNORE, \"\", \"%-.31s\"\n"
 "IFIELD        DESCRIPTION, \"\", \"%-.78s\"\n"
 ;
-style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap2006", xmap2006 } , { "xmap", xmap } , { "tomtom_itn", tomtom_itn } , { "tomtom_asc", tomtom_asc } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "iblue747", iblue747 } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } ,  {0,0}};
-size_t nstyles = 31;
+style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap2006", xmap2006 } , { "xmap", xmap } , { "tomtom_itn", tomtom_itn } , { "tomtom_asc", tomtom_asc } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "navigonwpt", navigonwpt } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "iblue747", iblue747 } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } ,  {0,0}};
+size_t nstyles = 32;
 #else /* CSVFMTS_ENABLED */
 style_vecs_t style_list[] = {{0,0}};
 size_t nstyles = 0;
index e4903631e03d40ec2131626fa88ff60234e4167e..12273658e299d037f481cff0f1b7a8f274c20eee 100644 (file)
@@ -40,8 +40,8 @@
   ./gpsbabel -D 2 -t -w -i mtk -f /dev/ttyUSB0 -o gpx -F out.gpx
   
    # Parse an existing .bin file (data_2007_09_04.bin), output trackpoints as 
-   #  both CSV file and GPX
-  ./gpsbabel -D 2 -t -i mtk-bin,csv=data__2007_09_04.csv -f data_2007_09_04.bin -o gpx -F out.gpx
+   #  both CSV file and GPX, discard points without fix
+  ./gpsbabel -D 2 -t -i mtk-bin,csv=data__2007_09_04.csv -f data_2007_09_04.bin -x discard,fixnone -o gpx -F out.gpx
 
   Todo:
     o ....    
@@ -103,6 +103,12 @@ static const char *MTK_ACK[] = { /* Flags returned from PMTK001 ack packet */
   "Invalid packet", "Unsupported packet type", 
   "Valid packet but action failed", "Valid packet, action success" };
 
+#define MTK_EVT_BITMASK  (1<<0x02)
+#define MTK_EVT_PERIOD   (1<<0x03)
+#define MTK_EVT_DISTANCE (1<<0x04)
+#define MTK_EVT_SPEED    (1<<0x05)
+#define MTK_EVT_START    (1<<0x07)
+
 /* *************************************** */
 
 /* Data id, type, sizes used by MTK chipset - don't touch.... */
@@ -183,6 +189,7 @@ struct mtk_loginfo {
    unsigned int bitmask;
    int logLen;
    int period, distance, speed; /* in 10:ths of sec, m, km/h */
+   int track_event;
 } mtk_loginfo;
 
 /* *************************************** */
@@ -597,10 +604,16 @@ static int add_trackpoint(int idx, unsigned long bmask, struct data_item *itm){
     char     wp_name[20];
     waypoint *trk = waypt_new();
 
-    if ( global_opts.masked_objective & TRKDATAMASK && trk_head == NULL ){
+    if ( global_opts.masked_objective & TRKDATAMASK && (trk_head == NULL || (mtk_info.track_event & MTK_EVT_START) ) ){
+        char spds[50];
         trk_head = route_head_alloc();
-        xasprintf(&trk_head->rte_desc, "Log every %.0f sec, %.0f m, %.0f km/h" 
-          , mtk_info.period/10., mtk_info.distance/10., mtk_info.speed/10.);
+        xasprintf(&trk_head->rte_name, "track-%d", 1+track_count() );
+
+        spds[0] = '\0';
+        if ( mtk_info.speed > 0 )
+           sprintf(spds, " when moving above %.0f km/h", mtk_info.speed/10.);
+        xasprintf(&trk_head->rte_desc, "Log every %.0f sec, %.0f m%s" 
+           , mtk_info.period/10., mtk_info.distance/10., spds);
         track_add_head(trk_head);
     } 
 
@@ -837,8 +850,7 @@ int mtk_parse(unsigned char *data, int dataLen, unsigned int bmask){
    unsigned char crc;
    struct data_item itm;
 
-   dbg(5,"Entering mtk_parse, count = %i, dataLen = %i\n",
-                                                                          count, dataLen);
+   dbg(5,"Entering mtk_parse, count = %i, dataLen = %i\n", count, dataLen);
    if ( global_opts.debug_level > 5 ) {
           int j;
           fprintf(stderr,"# Data block:");
@@ -1005,6 +1017,7 @@ int mtk_parse(unsigned char *data, int dataLen, unsigned int bmask){
 
    add_trackpoint(count, bmask, &itm);
 
+   mtk_info.track_event = 0;
    return i;
 }
 
@@ -1028,33 +1041,40 @@ static int mtk_parse_info(const unsigned char *data, int dataLen){
             dbg(1, "# Log bitmask is: %.8x\n", bm);
             if ( is_m241 ) 
                bm &= 0x7fffffffU;
-            if ( mtk_info.bitmask != bm )
+            if ( mtk_info.bitmask != bm ){
                dbg(1," ########## Bitmask Change   %.8x -> %.8x ###########\n", mtk_info.bitmask, bm);
+               mtk_info.track_event |= MTK_EVT_BITMASK;
+            }
             mtk_info.bitmask = bm;
             mtk_info.logLen = mtk_log_len(mtk_info.bitmask);
             break;
          case 0x03:
             dbg(1, "# Log period change %.0f sec\n", cmd/10.);
+            mtk_info.track_event |= MTK_EVT_PERIOD;
             mtk_info.period = cmd;
             break;
          case 0x04:
             dbg(1, "# Log distance change %.1f m\n", cmd/10.);
+            mtk_info.track_event |= MTK_EVT_DISTANCE;
             mtk_info.distance = cmd;
             break;
          case 0x05:
             dbg(1, "# Log speed change %.1f km/h\n", cmd/10.);
+            mtk_info.track_event |= MTK_EVT_SPEED;
             mtk_info.speed  = cmd;
             break;
          case 0x06:
             dbg(1, "# Log policy change 0x%.4x\n", cmd);
-            if  ( cmd == 0x01 ) 
+            if  ( cmd == 0x01 )
                dbg(1, "# Log policy change to OVERWRITE\n");
             if  ( cmd == 0x02 ) 
                dbg(1, "# Log policy change to STOP\n");
             break;
          case 0x07:
-            if ( cmd == 0x0106 )
-              dbg(5, "# GPS Logger# Turned On\n"); // Fixme - start new trk
+            if ( cmd == 0x0106 ){
+               dbg(5, "# GPS Logger# Turned On\n"); // Fixme - start new trk
+               mtk_info.track_event |= MTK_EVT_START;
+            }
             if ( cmd == 0x0104 )
               dbg(5, "# GPS Logger# Log disabled\n");
             break;
@@ -1181,7 +1201,8 @@ static void file_read(void) {
       mtk_info.distance = log_distance;
       mtk_info.speed  = log_speed;
    }
-
+   mtk_info.track_event = 0;
+   
    pos = 0x200; // skip header...first data position 
    fseek(fl, pos, SEEK_SET);  
    
index 1e119905eb5a5bf433194bc9821fdffefcd34c9c..ec4ebaaa6974a5d04c54d741344171d010b39f68 100644 (file)
@@ -43,7 +43,8 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/
   <sat>7</sat>
 </wpt>
 <trk>
-  <desc>Log every 5 sec, 100 m, 0 km/h</desc>
+  <name>track-1</name>
+  <desc>Log every 5 sec, 100 m</desc>
 <trkseg>
 <trkpt lat="57.719580948" lon="12.016372082">
   <ele>98.469612</ele>
@@ -61,6 +62,12 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/
   <name>TP000002</name>
   <fix>none</fix>
 </trkpt>
+</trkseg>
+</trk>
+<trk>
+  <name>track-2</name>
+  <desc>Log every 5 sec, 100 m</desc>
+<trkseg>
 <trkpt lat="57.719580948" lon="12.016372082">
   <ele>98.469612</ele>
 <time>2008-01-27T14:13:51.012Z</time>
@@ -7370,6 +7377,12 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/
   <fix>3d</fix>
   <sat>7</sat>
 </trkpt>
+</trkseg>
+</trk>
+<trk>
+  <name>track-3</name>
+  <desc>Log every 5 sec, 100 m</desc>
+<trkseg>
 <trkpt lat="57.707408790" lon="11.971353747">
   <ele>29.132912</ele>
 <time>2008-01-27T18:13:26.129Z</time>
index d029d54840b29714c903d4df920e0d0185c65869..e4375b6544b72d2d509272d493fb9a4e7ede388b 100644 (file)
@@ -92,7 +92,8 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/
   <pdop>4.480000</pdop>
 </wpt>
 <trk>
-  <desc>Log every 5 sec, 0 m, 6 km/h</desc>
+  <name>track-1</name>
+  <desc>Log every 5 sec, 0 m when moving above 6 km/h</desc>
 <trkseg>
 <trkpt lat="41.805591583" lon="12.679831505">
   <ele>374.812500</ele>